SpringBoot Admin使用Nacos作为服务注册中心

之前我们都讲了普通的服务使用SBD,如果我们使用的是类似Nacos、Eureka、Consul等注册中心实现服务注册的,那我们应该怎么配置相应的安全策略?

在Client端,我们依然需要引入sbd-client相关依赖包:

1
2
3
4
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

即使是使用注册中心,该依赖的包也不能少,不然client就走丢了

包引入之后,同样的是在项目配置文件中将actuator的相关端口暴露出来,这个之前讲过,包括Spring Security的配置,就不在赘述了,贴一下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS

spring:
boot:
admin:
client:
url: <sbd server url>
instance:
# 如果应用容器化了,那么最好设置一下service-base-url参数,否则被映射出去的是容器的ip和端口
service-base-url: http://host_ip:host_port
metadata:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
# Spring Security配置
security:
user:
name: <actuator user>
password: <password for actuator user>

Spring Security配置:

1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests().antMatchers("/actuator/**").authenticated().anyRequest().permitAll();
}
}

client端已经配置完了,接下来就是SBD server端的配置了,和我们之前的配置也没差太多,主要是将SBD的用户名密码告知注册中心,我们这里使用的是Nacos,所以我们要将账号信息告诉Nacos,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spring:
application:
name: jsb_micro_admin_server
security:
user:
name: <sbd user>
password: <password for sbd user>
cloud:
nacos:
discovery:
server-addr: <nacos_server_ip>:<nacos_server_port>
namespace: prd
ip: <sbd_ip>
metadata:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}

双方服务启动即可,注意这里的namespace需要与服务的namespace一致,也就是它只能发现同一个namespace下的服务。

至此所有的配置就都搞定了,启动即可